#define	_CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

//struct ListNode {
//    int val;
//    struct ListNode* next;
//};
//
//struct ListNode* removeElements(struct ListNode* head, int val) {
//    struct ListNode* cur = head;
//    struct ListNode* prev = NULL;
//    while (cur)
//    {
//        if (cur->val != val)
//        {
//            prev = cur;
//            cur = cur->next;
//        }
//        else
//        {
//            if (head->val == val)
//            {
//                struct ListNode* next = head->next;
//                free(head);
//                head = next;
//                cur = next;
//            }
//            else
//            {
//                prev->next = cur->next;
//                free(cur);
//                cur = prev->next;
//            }
//        }
//    }
//    return head;
//}
//
//int main()
//{
//    struct ListNode* node1 = (struct ListNode*)malloc(sizeof(struct ListNode));
//    struct ListNode* node2 = (struct ListNode*)malloc(sizeof(struct ListNode));
//    struct ListNode* node3 = (struct ListNode*)malloc(sizeof(struct ListNode));
//    struct ListNode* node4 = (struct ListNode*)malloc(sizeof(struct ListNode));
//
//    node1->val = 7;
//    node2->val = 7;
//    node3->val = 7;
//    node4->val = 7;
//
//    node1->next = node2;
//    node2->next = node3;
//    node3->next = node4;
//    node4->next = NULL;
//
//    node1 = removeElements(node1, 7);
//
//    return 0;
//}

//struct ListNode* reverseList(struct ListNode* head) {
//    struct ListNode* newhead = NULL;
//    struct ListNode* cur = head;
//    while (cur)
//    {
//        struct ListNode* next = cur->next;
//        cur->next = newhead;
//        newhead = cur;
//        cur = next;
//    }
//
//    return newhead;
//}

//struct ListNode* middleNode(struct ListNode* head) {
//    struct ListNode* slow = head;
//    struct ListNode* fast = head;
//    while (fast != NULL && fast->next != NULL)
//    {
//        fast = fast->next->next;
//        slow = slow->next;
//    }
//
//    return slow;
//}